package pe.gob.mininter.dirandro.vaadin.panel.documento;

import java.util.Date;

import org.apache.log4j.Logger;

import pe.gob.mininter.dirandro.model.Pericia;
import pe.gob.mininter.dirandro.service.PericiaService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.util.HarecUtil;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;
import pe.gob.mininter.dirandro.vaadin.util.UploadDirandro;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.VerticalLayout;

public class PanelRegistroPericia extends CustomComponent {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout verticalLayout_1;
	@AutoGenerated
	private Button btnRegistrar;
	@AutoGenerated
	private TextArea txtDescrcipcionLogo;
	@AutoGenerated
	private Label lblLogo;
	@AutoGenerated
	private UploadDirandro updLogo;
	@AutoGenerated
	private Label lblPericia;
	@AutoGenerated
	private UploadDirandro updPericia;
	@AutoGenerated
	private ComboBoxLOVS cmbEstadoPericia;
	@AutoGenerated
	private PopupDateField dtPericia;
	@AutoGenerated
	private Label lblMuestra;
	private static final Logger logger = Logger.getLogger(PanelRegistroPericia.class);
	private Pericia pericia;
	private PericiaService periciaService;
	
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelRegistroPericia() {
		buildMainLayout();
		setCompositionRoot(mainLayout);

		periciaService = Injector.obtenerServicio(PericiaService.class);
		
		postConstruct();
		
	}

	private void postConstruct(){
	
		cmbEstadoPericia.setImmediate(true);
		cmbEstadoPericia.setInputPrompt("Estado de la Pericia");
		cmbEstadoPericia.setCodigoLista(Constante.LISTA.CODIGO.ESTADO_PERICIA);
		cmbEstadoPericia.attach();
		
		lblLogo.setVisible(false);
		lblPericia.setVisible(false);
		
		btnRegistrar.addListener(new ClickListener() {
			
			private static final long serialVersionUID = 4539783663387871432L;

			@Override
			public void buttonClick(ClickEvent event) {
				
				registraPericia();
				
			}
			
		});
			
	}
	
	public void registraPericia(){
		
		pericia.setFechaPeritaje( (Date)dtPericia.getValue() );
		pericia.setEstado( cmbEstadoPericia.getValor() );
		pericia.setDescripcionLogo( HarecUtil.nullToEmpty( txtDescrcipcionLogo.getValue()) );
		if(updLogo.getFilename()!=null ){
			logger.debug("registraro Logo cargado ");
			pericia.setOsLogo( updLogo.getOutputStream() );
			pericia.setFilenameLogo( updLogo.getFilename() );
		}
		if(updPericia.getFilename()!=null ){
			logger.debug("registro AdjuntoPericia cargado");
			pericia.setOsPericia( updPericia.getOutputStream() );
			pericia.setFilenamePericia( updPericia.getFilename() );
		}
		periciaService.actualizar(pericia);
				
		AlertDialog alertDialog = new  AlertDialog("Actualización de Pericia", "Se ha actualizaod la pericia correctamente", "Aceptar", "400");
		getApplication().getMainWindow().addWindow(alertDialog);
		getApplication().getMainWindow().removeWindow(getWindow());
		
	}
	
	public Pericia getPericia() {
		return pericia;
	}

	public void setPericia(Pericia pericia) {
		this.pericia = pericia;
		cargaDatos();
	}

	private void cargaDatos(){
		if( pericia!=null){
			
			cmbEstadoPericia.select(pericia.getEstado());
			txtDescrcipcionLogo.setValue( HarecUtil.nullToEmpty( pericia.getDescripcionLogo() ) );
			dtPericia.setValue( pericia.getFechaPeritaje() );
			if(pericia.getLogo()!=null ){
				logger.debug("pericia LOGO CON DATOS");
				updLogo.setVisible(false);
				lblLogo.setVisible(true);
				lblLogo.setValue( pericia.getLogo().getNombre() );
			}
			if(pericia.getAdjunto()!=null){
				logger.debug("pericia ADJUNTO con DATOS");
				updPericia.setVisible(false);
				lblPericia.setVisible(true);
				lblPericia.setValue( pericia.getAdjunto().getNombre() );
			}
			StringBuilder texto = new StringBuilder();
			texto.append( pericia.getMuestra().getDroga()!=null?"Droga":"Especie" );
			texto.append( " : " );
			texto.append( pericia.getMuestra().getDroga()!=null? HarecUtil.marcaModeloNombreToEmpty( pericia.getMuestra().getDroga().getTipoDroga() ) : pericia.getMuestra().getEspecie().getNombre()  );
			lblMuestra.setValue( texto.toString() ); 
			
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// verticalLayout_1
		verticalLayout_1 = buildVerticalLayout_1();
		mainLayout.addComponent(verticalLayout_1);
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_1() {
		// common part: create layout
		verticalLayout_1 = new VerticalLayout();
		verticalLayout_1.setImmediate(false);
		verticalLayout_1.setWidth("500px");
		verticalLayout_1.setHeight("-1px");
		verticalLayout_1.setMargin(true);
		verticalLayout_1.setSpacing(true);
		
		// lblMuestra
		lblMuestra = new Label();
		lblMuestra.setImmediate(false);
		lblMuestra.setWidth("-1px");
		lblMuestra.setHeight("-1px");
		lblMuestra.setValue("Label");
		verticalLayout_1.addComponent(lblMuestra);
		
		// dtPericia
		dtPericia = new PopupDateField();
		dtPericia.setCaption("Fecha de Pericia");
		dtPericia.setImmediate(false);
		dtPericia.setWidth("150px");
		dtPericia.setHeight("-1px");
		dtPericia.setRequired(true);
		dtPericia.setResolution(4);
		verticalLayout_1.addComponent(dtPericia);
		
		// cmbEstadoPericia
		cmbEstadoPericia = new ComboBoxLOVS();
		cmbEstadoPericia.setCaption("Estado de la Pericia");
		cmbEstadoPericia.setImmediate(false);
		cmbEstadoPericia.setWidth("250px");
		cmbEstadoPericia.setHeight("-1px");
		verticalLayout_1.addComponent(cmbEstadoPericia);
		
		// updPericia
		updPericia = new UploadDirandro();
		updPericia.setCaption("Informe de Pericia");
		updPericia.setImmediate(false);
		updPericia.setWidth("-1px");
		updPericia.setHeight("-1px");
		verticalLayout_1.addComponent(updPericia);
		
		// lblPericia
		lblPericia = new Label();
		lblPericia.setImmediate(false);
		lblPericia.setWidth("-1px");
		lblPericia.setHeight("-1px");
		lblPericia.setValue("Label");
		verticalLayout_1.addComponent(lblPericia);
		
		// updLogo
		updLogo = new UploadDirandro();
		updLogo.setCaption("Logo de la droga");
		updLogo.setImmediate(false);
		updLogo.setWidth("-1px");
		updLogo.setHeight("-1px");
		verticalLayout_1.addComponent(updLogo);
		
		// lblLogo
		lblLogo = new Label();
		lblLogo.setImmediate(false);
		lblLogo.setWidth("-1px");
		lblLogo.setHeight("-1px");
		lblLogo.setValue("Label");
		verticalLayout_1.addComponent(lblLogo);
		
		// txtDescrcipcionLogo
		txtDescrcipcionLogo = new TextArea();
		txtDescrcipcionLogo.setCaption("Descripción del logo");
		txtDescrcipcionLogo.setImmediate(false);
		txtDescrcipcionLogo.setWidth("400px");
		txtDescrcipcionLogo.setHeight("-1px");
		txtDescrcipcionLogo.setInputPrompt("Descripción del logo");
		txtDescrcipcionLogo.setMaxLength(2000);
		verticalLayout_1.addComponent(txtDescrcipcionLogo);
		
		// btnRegistrar
		btnRegistrar = new Button();
		btnRegistrar.setCaption("Crear");
		btnRegistrar.setImmediate(true);
		btnRegistrar.setWidth("-1px");
		btnRegistrar.setHeight("-1px");
		verticalLayout_1.addComponent(btnRegistrar);
		verticalLayout_1.setComponentAlignment(btnRegistrar, new Alignment(48));
		
		return verticalLayout_1;
	}

}
